/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (the "License"); you may not use this
 * file except in compliance with the License. You may obtain a copy of the
 * License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */
/**
 * Nudr_DataRepository API OpenAPI file
 * Unified Data Repository Service. © 2020, 3GPP Organizational Partners (ARIB,
 * ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
 *
 * The version of the OpenAPI document: 2.1.2
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator
 * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
 * the class manually.
 */
/*
 * AccessAndMobilitySubscriptionData.h
 *
 *
 */

#ifndef AccessAndMobilitySubscriptionData_H_
#define AccessAndMobilitySubscriptionData_H_

#include <string>
#include <vector>

#include "Area.h"
#include "CagData.h"
#include "CoreNetworkType.h"
#include "EdrxParameters.h"
#include "ExpectedUeBehaviourData.h"
#include "MdtUserConsent.h"
#include "Nssai.h"
#include "OdbPacketServices.h"
#include "PtwParameters.h"
#include "RatType.h"
#include "SorInfo.h"
#include "SorUpdateIndicator.h"
#include "TraceData.h"
#include "UpuInfo.h"
#include "WirelineServiceAreaRestriction.h"
//#include "AnyOfstringstring.h"
#include <map>
#include <nlohmann/json.hpp>

#include "AmbrRm.h"
#include "EcRestrictionDataWb.h"
#include "MdtConfiguration.h"
#include "ServiceAreaRestriction.h"
#include "WirelineArea.h"

namespace oai::udr::model {

/// <summary>
///
/// </summary>
class AccessAndMobilitySubscriptionData {
public:
  AccessAndMobilitySubscriptionData();
  virtual ~AccessAndMobilitySubscriptionData();

  void validate();

  /////////////////////////////////////////////
  /// AccessAndMobilitySubscriptionData members

  /// <summary>
  ///
  /// </summary>
  std::string getSupportedFeatures() const;
  void setSupportedFeatures(std::string const &value);
  bool supportedFeaturesIsSet() const;
  void unsetSupportedFeatures();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string> &getGpsis();
  void setGpsis(std::vector<std::string> const &value);
  bool gpsisIsSet() const;
  void unsetGpsis();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string> &getInternalGroupIds();
  void setInternalGroupIds(std::vector<std::string> const &value);
  bool internalGroupIdsIsSet() const;
  void unsetInternalGroupIds();
  /// <summary>
  ///
  /// </summary>
  std::map<std::string, std::string> &getSharedVnGroupDataIds();
  void setSharedVnGroupDataIds(std::map<std::string, std::string> const &value);
  bool sharedVnGroupDataIdsIsSet() const;
  void unsetSharedVnGroupDataIds();
  /// <summary>
  ///
  /// </summary>
  AmbrRm getSubscribedUeAmbr() const;
  void setSubscribedUeAmbr(AmbrRm const &value);
  bool subscribedUeAmbrIsSet() const;
  void unsetSubscribedUeAmbr();
  /// <summary>
  ///
  /// </summary>
  Nssai getNssai() const;
  void setNssai(Nssai const &value);
  bool nssaiIsSet() const;
  void unsetNssai();
  /// <summary>
  ///
  /// </summary>
  std::vector<RatType> &getRatRestrictions();
  void setRatRestrictions(std::vector<RatType> const &value);
  bool ratRestrictionsIsSet() const;
  void unsetRatRestrictions();
  /// <summary>
  ///
  /// </summary>
  std::vector<Area> &getForbiddenAreas();
  void setForbiddenAreas(std::vector<Area> const &value);
  bool forbiddenAreasIsSet() const;
  void unsetForbiddenAreas();
  /// <summary>
  ///
  /// </summary>
  ServiceAreaRestriction getServiceAreaRestriction() const;
  void setServiceAreaRestriction(ServiceAreaRestriction const &value);
  bool serviceAreaRestrictionIsSet() const;
  void unsetServiceAreaRestriction();
  /// <summary>
  ///
  /// </summary>
  std::vector<CoreNetworkType> &getCoreNetworkTypeRestrictions();
  void
  setCoreNetworkTypeRestrictions(std::vector<CoreNetworkType> const &value);
  bool coreNetworkTypeRestrictionsIsSet() const;
  void unsetCoreNetworkTypeRestrictions();
  /// <summary>
  ///
  /// </summary>
  int32_t getRfspIndex() const;
  void setRfspIndex(int32_t const value);
  bool rfspIndexIsSet() const;
  void unsetRfspIndex();
  /// <summary>
  ///
  /// </summary>
  int32_t getSubsRegTimer() const;
  void setSubsRegTimer(int32_t const value);
  bool subsRegTimerIsSet() const;
  void unsetSubsRegTimer();
  /// <summary>
  ///
  /// </summary>
  int32_t getUeUsageType() const;
  void setUeUsageType(int32_t const value);
  bool ueUsageTypeIsSet() const;
  void unsetUeUsageType();
  /// <summary>
  ///
  /// </summary>
  bool isMpsPriority() const;
  void setMpsPriority(bool const value);
  bool mpsPriorityIsSet() const;
  void unsetMpsPriority();
  /// <summary>
  ///
  /// </summary>
  bool isMcsPriority() const;
  void setMcsPriority(bool const value);
  bool mcsPriorityIsSet() const;
  void unsetMcsPriority();
  /// <summary>
  ///
  /// </summary>
  int32_t getActiveTime() const;
  void setActiveTime(int32_t const value);
  bool activeTimeIsSet() const;
  void unsetActiveTime();
  /// <summary>
  ///
  /// </summary>
  SorInfo getSorInfo() const;
  void setSorInfo(SorInfo const &value);
  bool sorInfoIsSet() const;
  void unsetSorInfo();
  /// <summary>
  ///
  /// </summary>
  bool isSorInfoExpectInd() const;
  void setSorInfoExpectInd(bool const value);
  bool sorInfoExpectIndIsSet() const;
  void unsetSorInfoExpectInd();
  /// <summary>
  ///
  /// </summary>
  bool isSorafRetrieval() const;
  void setSorafRetrieval(bool const value);
  bool sorafRetrievalIsSet() const;
  void unsetSorafRetrieval();
  /// <summary>
  ///
  /// </summary>
  std::vector<SorUpdateIndicator> &getSorUpdateIndicatorList();
  void setSorUpdateIndicatorList(std::vector<SorUpdateIndicator> const &value);
  bool sorUpdateIndicatorListIsSet() const;
  void unsetSorUpdateIndicatorList();
  /// <summary>
  ///
  /// </summary>
  UpuInfo getUpuInfo() const;
  void setUpuInfo(UpuInfo const &value);
  bool upuInfoIsSet() const;
  void unsetUpuInfo();
  /// <summary>
  ///
  /// </summary>
  bool isMicoAllowed() const;
  void setMicoAllowed(bool const value);
  bool micoAllowedIsSet() const;
  void unsetMicoAllowed();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string> &getSharedAmDataIds();
  void setSharedAmDataIds(std::vector<std::string> const &value);
  bool sharedAmDataIdsIsSet() const;
  void unsetSharedAmDataIds();
  /// <summary>
  ///
  /// </summary>
  OdbPacketServices getOdbPacketServices() const;
  void setOdbPacketServices(OdbPacketServices const &value);
  bool odbPacketServicesIsSet() const;
  void unsetOdbPacketServices();
  /// <summary>
  ///
  /// </summary>
  //    std::vector<AnyOfstringstring>& getSubscribedDnnList();
  //    void setSubscribedDnnList(std::vector<AnyOfstringstring> const& value);
  bool subscribedDnnListIsSet() const;
  void unsetSubscribedDnnList();
  /// <summary>
  ///
  /// </summary>
  int32_t getServiceGapTime() const;
  void setServiceGapTime(int32_t const value);
  bool serviceGapTimeIsSet() const;
  void unsetServiceGapTime();
  /// <summary>
  ///
  /// </summary>
  MdtUserConsent getMdtUserConsent() const;
  void setMdtUserConsent(MdtUserConsent const &value);
  bool mdtUserConsentIsSet() const;
  void unsetMdtUserConsent();
  /// <summary>
  ///
  /// </summary>
  MdtConfiguration getMdtConfiguration() const;
  void setMdtConfiguration(MdtConfiguration const &value);
  bool mdtConfigurationIsSet() const;
  void unsetMdtConfiguration();
  /// <summary>
  ///
  /// </summary>
  TraceData getTraceData() const;
  void setTraceData(TraceData const &value);
  bool traceDataIsSet() const;
  void unsetTraceData();
  /// <summary>
  ///
  /// </summary>
  CagData getCagData() const;
  void setCagData(CagData const &value);
  bool cagDataIsSet() const;
  void unsetCagData();
  /// <summary>
  ///
  /// </summary>
  std::string getStnSr() const;
  void setStnSr(std::string const &value);
  bool stnSrIsSet() const;
  void unsetStnSr();
  /// <summary>
  ///
  /// </summary>
  std::string getCMsisdn() const;
  void setCMsisdn(std::string const &value);
  bool cMsisdnIsSet() const;
  void unsetCMsisdn();
  /// <summary>
  ///
  /// </summary>
  int32_t getNbIoTUePriority() const;
  void setNbIoTUePriority(int32_t const value);
  bool nbIoTUePriorityIsSet() const;
  void unsetNbIoTUePriority();
  /// <summary>
  ///
  /// </summary>
  bool isNssaiInclusionAllowed() const;
  void setNssaiInclusionAllowed(bool const value);
  bool nssaiInclusionAllowedIsSet() const;
  void unsetNssaiInclusionAllowed();
  /// <summary>
  ///
  /// </summary>
  std::string getRgWirelineCharacteristics() const;
  void setRgWirelineCharacteristics(std::string const &value);
  bool rgWirelineCharacteristicsIsSet() const;
  void unsetRgWirelineCharacteristics();
  /// <summary>
  ///
  /// </summary>
  EcRestrictionDataWb getEcRestrictionDataWb() const;
  void setEcRestrictionDataWb(EcRestrictionDataWb const &value);
  bool ecRestrictionDataWbIsSet() const;
  void unsetEcRestrictionDataWb();
  /// <summary>
  ///
  /// </summary>
  bool isEcRestrictionDataNb() const;
  void setEcRestrictionDataNb(bool const value);
  bool ecRestrictionDataNbIsSet() const;
  void unsetEcRestrictionDataNb();
  /// <summary>
  ///
  /// </summary>
  ExpectedUeBehaviourData getExpectedUeBehaviourList() const;
  void setExpectedUeBehaviourList(ExpectedUeBehaviourData const &value);
  bool expectedUeBehaviourListIsSet() const;
  void unsetExpectedUeBehaviourList();
  /// <summary>
  ///
  /// </summary>
  std::vector<RatType> &getPrimaryRatRestrictions();
  void setPrimaryRatRestrictions(std::vector<RatType> const &value);
  bool primaryRatRestrictionsIsSet() const;
  void unsetPrimaryRatRestrictions();
  /// <summary>
  ///
  /// </summary>
  std::vector<RatType> &getSecondaryRatRestrictions();
  void setSecondaryRatRestrictions(std::vector<RatType> const &value);
  bool secondaryRatRestrictionsIsSet() const;
  void unsetSecondaryRatRestrictions();
  /// <summary>
  ///
  /// </summary>
  std::vector<EdrxParameters> &getEdrxParametersList();
  void setEdrxParametersList(std::vector<EdrxParameters> const &value);
  bool edrxParametersListIsSet() const;
  void unsetEdrxParametersList();
  /// <summary>
  ///
  /// </summary>
  std::vector<PtwParameters> &getPtwParametersList();
  void setPtwParametersList(std::vector<PtwParameters> const &value);
  bool ptwParametersListIsSet() const;
  void unsetPtwParametersList();
  /// <summary>
  ///
  /// </summary>
  bool isIabOperationAllowed() const;
  void setIabOperationAllowed(bool const value);
  bool iabOperationAllowedIsSet() const;
  void unsetIabOperationAllowed();
  /// <summary>
  ///
  /// </summary>
  std::vector<WirelineArea> &getWirelineForbiddenAreas();
  void setWirelineForbiddenAreas(std::vector<WirelineArea> const &value);
  bool wirelineForbiddenAreasIsSet() const;
  void unsetWirelineForbiddenAreas();
  /// <summary>
  ///
  /// </summary>
  WirelineServiceAreaRestriction getWirelineServiceAreaRestriction() const;
  void setWirelineServiceAreaRestriction(
      WirelineServiceAreaRestriction const &value);
  bool wirelineServiceAreaRestrictionIsSet() const;
  void unsetWirelineServiceAreaRestriction();

  friend void to_json(nlohmann::json &j,
                      const AccessAndMobilitySubscriptionData &o);
  friend void from_json(const nlohmann::json &j,
                        AccessAndMobilitySubscriptionData &o);

protected:
  std::string m_SupportedFeatures;
  bool m_SupportedFeaturesIsSet;
  std::vector<std::string> m_Gpsis;
  bool m_GpsisIsSet;
  std::vector<std::string> m_InternalGroupIds;
  bool m_InternalGroupIdsIsSet;
  std::map<std::string, std::string> m_SharedVnGroupDataIds;
  bool m_SharedVnGroupDataIdsIsSet;
  AmbrRm m_SubscribedUeAmbr;
  bool m_SubscribedUeAmbrIsSet;
  Nssai m_Nssai;
  bool m_NssaiIsSet;
  std::vector<RatType> m_RatRestrictions;
  bool m_RatRestrictionsIsSet;
  std::vector<Area> m_ForbiddenAreas;
  bool m_ForbiddenAreasIsSet;
  ServiceAreaRestriction m_ServiceAreaRestriction;
  bool m_ServiceAreaRestrictionIsSet;
  std::vector<CoreNetworkType> m_CoreNetworkTypeRestrictions;
  bool m_CoreNetworkTypeRestrictionsIsSet;
  int32_t m_RfspIndex;
  bool m_RfspIndexIsSet;
  int32_t m_SubsRegTimer;
  bool m_SubsRegTimerIsSet;
  int32_t m_UeUsageType;
  bool m_UeUsageTypeIsSet;
  bool m_MpsPriority;
  bool m_MpsPriorityIsSet;
  bool m_McsPriority;
  bool m_McsPriorityIsSet;
  int32_t m_ActiveTime;
  bool m_ActiveTimeIsSet;
  SorInfo m_SorInfo;
  bool m_SorInfoIsSet;
  bool m_SorInfoExpectInd;
  bool m_SorInfoExpectIndIsSet;
  bool m_SorafRetrieval;
  bool m_SorafRetrievalIsSet;
  std::vector<SorUpdateIndicator> m_SorUpdateIndicatorList;
  bool m_SorUpdateIndicatorListIsSet;
  UpuInfo m_UpuInfo;
  bool m_UpuInfoIsSet;
  bool m_MicoAllowed;
  bool m_MicoAllowedIsSet;
  std::vector<std::string> m_SharedAmDataIds;
  bool m_SharedAmDataIdsIsSet;
  OdbPacketServices m_OdbPacketServices;
  bool m_OdbPacketServicesIsSet;
  //    std::vector<AnyOfstringstring> m_SubscribedDnnList;
  bool m_SubscribedDnnListIsSet;
  int32_t m_ServiceGapTime;
  bool m_ServiceGapTimeIsSet;
  MdtUserConsent m_MdtUserConsent;
  bool m_MdtUserConsentIsSet;
  MdtConfiguration m_MdtConfiguration;
  bool m_MdtConfigurationIsSet;
  TraceData m_TraceData;
  bool m_TraceDataIsSet;
  CagData m_CagData;
  bool m_CagDataIsSet;
  std::string m_StnSr;
  bool m_StnSrIsSet;
  std::string m_CMsisdn;
  bool m_CMsisdnIsSet;
  int32_t m_NbIoTUePriority;
  bool m_NbIoTUePriorityIsSet;
  bool m_NssaiInclusionAllowed;
  bool m_NssaiInclusionAllowedIsSet;
  std::string m_RgWirelineCharacteristics;
  bool m_RgWirelineCharacteristicsIsSet;
  EcRestrictionDataWb m_EcRestrictionDataWb;
  bool m_EcRestrictionDataWbIsSet;
  bool m_EcRestrictionDataNb;
  bool m_EcRestrictionDataNbIsSet;
  ExpectedUeBehaviourData m_ExpectedUeBehaviourList;
  bool m_ExpectedUeBehaviourListIsSet;
  std::vector<RatType> m_PrimaryRatRestrictions;
  bool m_PrimaryRatRestrictionsIsSet;
  std::vector<RatType> m_SecondaryRatRestrictions;
  bool m_SecondaryRatRestrictionsIsSet;
  std::vector<EdrxParameters> m_EdrxParametersList;
  bool m_EdrxParametersListIsSet;
  std::vector<PtwParameters> m_PtwParametersList;
  bool m_PtwParametersListIsSet;
  bool m_IabOperationAllowed;
  bool m_IabOperationAllowedIsSet;
  std::vector<WirelineArea> m_WirelineForbiddenAreas;
  bool m_WirelineForbiddenAreasIsSet;
  WirelineServiceAreaRestriction m_WirelineServiceAreaRestriction;
  bool m_WirelineServiceAreaRestrictionIsSet;
};

} // namespace oai::udr::model

#endif /* AccessAndMobilitySubscriptionData_H_ */
